package org.erp.common.enums;

/**
 * 库存事件枚举
 */
public enum DeviceInventoryEvent {
    /** 初次入库（审计用，自身状态不变） */
    STORAGE(0, "初次入库"),
    /** 发起调拨 */
    ALLOCATE(1, "发起调拨"),

    /** 接驳完成 */
    HANDOVER(2, "接驳完成"),

    /** 售出 */
    SELL(3, "售出"),

    /** 调拨驳回 */
    REJECT(4, "调拨驳回"),

    /** 驳回到入库（从驳回到入库） */
    REJECT_TO_INBOUND(5, "驳回到入库"),

    /** 待返库到入库（从待返库到入库） */
    RETURN_TO_INBOUND(10, "待返库到入库"),

    /** 申请返库（从接驳退回仓） */
    REQUEST_RETURN(6, "申请返库"),
    /** 申请退库（从接驳走退库流程） */
    REQUEST_REFUND(7, "申请退库"),

    /** 确认退库完成 */
    CONFIRM_REFUND(8, "确认退库完成"),

    /** 撤销驳回（从驳回回到调拨中） */
    CANCEL_REJECT(9, "撤销驳回");


    private final Integer code;
    private final String message;
    DeviceInventoryEvent(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public static String getMessageByCode(Integer code) {
        for (DeviceInventoryEvent value : DeviceInventoryEvent.values()) {
            if (value.code.equals(code)) {
                return value.message;
            }
        }
        return null;
    }
    public static Integer getCodeByMessage(String message) {
        for (DeviceInventoryEvent value : DeviceInventoryEvent.values()) {
            if (value.message.equals(message)) {
                return value.code;
            }
        }
        return null;
    }

    public Integer getCode() {
        return this.code;
    }

    public String getMessage() {
        return this.message;
    }

    public boolean requiresProductCallback() {
        switch (this) {
            case ALLOCATE:
            case HANDOVER:
            case REJECT:
            case CANCEL_REJECT:
                return true;
            default:
                return false;
        }
    }


}
